import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { jwtConstants } from './config';
import * as expressJWT from 'express-jwt';
async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    bufferLogs: true,
  });
  // 全局挂载管道
  app.useGlobalPipes(new ValidationPipe());
  app.setGlobalPrefix('api'); // 设置全局路由前缀
  app.enableCors();
  // 定义解析token中间件
  app.use(
    expressJWT({
      secret: jwtConstants.secret,
      expiresIn: jwtConstants.expiresIn,
      algorithms: ['HS256'],
    }).unless({
      // 忽略以users/api-serve开头的接口
      path: [/^\/api\/login/],
    }),
  );

  // 定义身份认证失败中间件
  app.use((err, req, res, next) => {
    console.log(err.name);

    // 身份认证失败后的错误
    if (err.name === 'UnauthorizedError')
      return res.send({ status: '500', data: [], message: '身份认证失败' });
    // 未知的错误
    if (err)
      return res.send({ status: '501', data: [], message: '服务端错误' });
  });
  const config = new DocumentBuilder()
    .setTitle('后台接口文档22') // 标题
    .setDescription('学习级别') // 描述
    .setVersion('1.0') // 版本号
    .addTag('API文档') // 标签
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('/api/login/api-serve', app, document); // 接口文档访问路径

  await app.listen(8089);
}
bootstrap();
